home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / PNL Libraries / MyHandles.p < prev    next >
Text File  |  1996-10-02  |  3KB  |  95 lines

  1. unit MyHandles;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Types, Memory;
  7.  
  8.     type
  9.         HandleArray = ^Ptr;
  10.  
  11.     function HandleArrayCreate (var hhhh: HandleArray; size: longint): OSErr;
  12.     procedure HandleArrayDestroy (var hhhh: HandleArray);
  13.     function HandleArrayCount (hhhh: HandleArray): longint;
  14.     function HandleArrayGetSize (hhhh: HandleArray): longint;
  15.     function HandleArrayAppend (hhhh: HandleArray; data: Ptr): OSErr;
  16.     function HandleArrayInsert (hhhh: HandleArray; index: longint; data: Ptr): OSErr;
  17.     procedure HandleArrayGet (hhhh: HandleArray; index: longint; data: Ptr);
  18.     procedure HandleArraySet (hhhh: HandleArray; index: longint; data: Ptr);
  19.     procedure  HandleArrayDelete(hhhh: HandleArray; index: longint);
  20.     procedure HandleArrayReset (hhhh: HandleArray);
  21.  
  22. implementation
  23.  
  24.     uses
  25.         OSUtils, ToolUtils, MyAssertions, MyTypes, MyMemory;
  26.  
  27.     function HandleArrayCreate (var hhhh: HandleArray; size: longint): OSErr;
  28.         var
  29.             err: OSErr;
  30.     begin
  31.         err := MNewHandle(hhhh, SizeOf(longint));
  32.         if err = noErr then begin
  33.             longintH(hhhh)^^ := size;
  34.         end;
  35.         HandleArrayCreate := err;
  36.     end;
  37.  
  38.     procedure HandleArrayDestroy (var hhhh: HandleArray);
  39.     begin
  40.         MDisposeHandle( hhhh );
  41.     end;
  42.  
  43.     procedure HandleArrayReset (hhhh: HandleArray);
  44.     begin
  45.         Assert(hhhh <> nil);
  46.         SetHandleSize(Handle(hhhh), SizeOf(longint));
  47.     end;
  48.  
  49.     function HandleArrayCount (hhhh: HandleArray): longint;
  50.     begin
  51.         Assert(hhhh <> nil);
  52.         HandleArrayCount := (GetHandleSize(Handle(hhhh)) - SizeOf(longint)) div longintH(hhhh)^^;
  53.     end;
  54.  
  55.     function HandleArrayGetSize (hhhh: HandleArray): longint;
  56.     begin
  57.         Assert(hhhh <> nil);
  58.         if GetHandleSize(Handle(hhhh)) > SizeOf(longint) then begin
  59.             HandleArrayGetSize := longintH(hhhh)^^;
  60.         end else begin
  61.             HandleArrayGetSize := -1;
  62.         end;
  63.     end;
  64.  
  65.     function HandleArrayAppend (hhhh: HandleArray; data: Ptr): OSErr;
  66.     begin
  67.         Assert(hhhh <> nil);
  68.         HandleArrayAppend := PtrAndHand(data, Handle(hhhh), longintH(hhhh)^^);
  69.     end;
  70.  
  71.     function HandleArrayInsert (hhhh: HandleArray; index: longint; data: Ptr): OSErr;
  72.     begin
  73.         Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh) + 1));
  74.         HandleArrayInsert := MMungerInsert(Handle(hhhh), SizeOf(longint) + (index - 1) * longintH(hhhh)^^, data, longintH(hhhh)^^);
  75.     end;
  76.  
  77.     procedure HandleArrayGet (hhhh: HandleArray; index: longint; data: Ptr);
  78.     begin
  79.         Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
  80.         BlockMoveData(Ptr(ord(hhhh^) + SizeOf(longint) + (index - 1) * longintH(hhhh)^^), data, longintH(hhhh)^^);
  81.     end;
  82.  
  83.     procedure HandleArraySet (hhhh: HandleArray; index: longint; data: Ptr);
  84.     begin
  85.         Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
  86.         BlockMoveData(data, Ptr(ord(hhhh^) + SizeOf(longint) + (index - 1) * longintH(hhhh)^^), longintH(hhhh)^^);
  87.     end;
  88.  
  89.     procedure HandleArrayDelete (hhhh: HandleArray; index: longint);
  90.     begin
  91.         Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
  92.         MMungerDelete(Handle(hhhh), SizeOf(longint) + (index - 1) * longintH(hhhh)^^, longintH(hhhh)^^);
  93.     end;
  94.  
  95. end.